home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / pc / pm65sdk / sourcecode / includes / ciimageaccess.h < prev    next >
C/C++ Source or Header  |  1996-11-18  |  7KB  |  151 lines

  1. /***[f*****************************************************************
  2.  *    CImgAcc.h    -- image Object Access Interface. 
  3.  *
  4.  *    Copyright 1996 (c) Adobe Systems, Inc. All Rights Reserved
  5.  *
  6.  *    Public version
  7.  * $Revision:   1.4  $
  8.  *
  9.  *
  10.  *    
  11.  ***f]*****************************************************************/
  12.  
  13. #ifndef __CIMGACC_H
  14. #define __CIMGACC_H
  15.  
  16. typedef    struct    _PMImageObjAttr {
  17.     unsigned short    isIndexed        : 1;    // is indexed image ==> has color map
  18.     unsigned short    isHifi            : 1;    // is multi-ink image
  19.     unsigned short    hasAlpha        : 1;    // has alpha sample
  20.     unsigned short    isColorManaged    : 1;    // color managed image (with ICC profile)
  21.     unsigned short    isGray            : 1;    // is grayscale image
  22.     unsigned short    unused            : 11;
  23.     
  24.     unsigned short    photo;                    // photometric interpretation
  25.  
  26.     unsigned long    imageWidth;                // image width in pixel
  27.     unsigned long    imageLength;            // image height in pixel
  28.                                             // crop rect in image space dimension
  29.     unsigned long    startingCol;            // starting pix in row
  30.     unsigned long    nCols;                    // number of pixels
  31.     unsigned long    startingRow;            // starting scanned line
  32.     unsigned long    nRows;                    // number of scanned lines
  33.     
  34.     double            xRes;                    // x resolution in dpi
  35.     double            yRes;                    // y resolution in dpi
  36.  
  37.     char            pluginType[4];
  38.     char            mediaType[4];
  39. } PMImageObjAttr;
  40.  
  41. ////////////////////////////////////////////////////////////////////////
  42. //     IMAGEDATAOPTIONS
  43. //
  44. //    DESCRIPTION:
  45. //    These are options for accessing images pixel data:
  46. //
  47. //    kImageAttributeOnly    Setup image for attributes access only, i.e.
  48. //                        will not try to acces image pixel data. Use this
  49. //                        option whenever image pixel data access will not be
  50. //                        needed. This will speed up setup process.
  51. //                        If this is set then all option flags related to
  52. //                        actual image data format will be ignored.
  53. //    kKeepImageBitdepth    The pixel data returned will be in its original
  54. //                        bitdepth. The default is to expand data to 8-bit
  55. //                        samples. When data are expanded to 8-bit samples:
  56. //                        1. Contone data will be interpolated so that 0 is 
  57. //                           mapped to 0 and 15 is mapped to 255 for 4-bit data.
  58. //                        2. Indexed data kept their original values but data 
  59. //                           are returned as 8-bit samples.
  60. //    kNoAlphaSamples        Pixels with alpha samples will be munged. At this
  61. //                        point, only the first associated alpha sample is
  62. //                        supported. Unassociated data and undefined extra
  63. //                        samples are dropped when kNoAlphaSamples is set.
  64. //    kMonoAsBlackZero    All contone monochrome data are returned as
  65. //                        Black Zero, i.e. 0 means black and (1<<x - 1) is white,
  66. //                        where x is the original bitdepth.
  67. //    kBWAsGray            1-bit B&W data is returned as gray data. That is 0
  68. //                        is mapped to 0 and 1 is mapped to 255.
  69. //
  70. ////////////////////////////////////////////////////////////////////////
  71.  
  72. typedef    unsigned long    IMAGEDATAOPTIONS;
  73. #define    kUseStandardDisplay            (IMAGEDATAOPTIONS)(1<<0)
  74. #define    kImageAttributeOnly            (IMAGEDATAOPTIONS)(1<<1)
  75. #define    kKeepImageBitdepth            (IMAGEDATAOPTIONS)(1<<2)
  76. #define    kNoAlphaSamples                (IMAGEDATAOPTIONS)(1<<3)
  77. #define    kMonoAsBlackZero            (IMAGEDATAOPTIONS)(1<<4)
  78. #define    kBWAsGray                    (IMAGEDATAOPTIONS)(1<<5)
  79.  
  80. #ifdef __cplusplus
  81. class CIImageObject : public CIInterface
  82. {
  83. public:
  84.     virtual    ~CIImageObject() {};
  85.     
  86.     // Set up to do image object access.
  87.     virtual PMXErr Setup( PMOBJ_REC* pObjRec, unsigned long options ) = 0;
  88.     
  89.     // Make sure this is called when finished.
  90.     virtual void Finished() = 0;
  91.     
  92.     // Get image object attributes. Setup() must be called first.
  93.     virtual    PMXErr GetImageAttr( PMImageObjAttr* pImObjAttr ) = 0;
  94.     
  95.     // Set row data access options. The option flags defined above can be or'ed
  96.     // together.
  97.     virtual PMXErr SetImageRowDataOptions( unsigned long options ) = 0;
  98.  
  99.     // Get image bits per sample and sample per pixels
  100.     virtual    PMXErr GetImageBitDepth( short *pBPS, short *pSPP ) = 0;
  101.     
  102.     // Get image row pixel data according to the options set.
  103.     virtual PMXErr GetImageRowData( unsigned long startCol, unsigned long startRow,
  104.                             unsigned long nCols, unsigned long nRows, char *pBuffer, unsigned long rowOffset ) = 0;
  105.     
  106.     // Get image row pixel data by plane according to the options set
  107.     virtual PMXErr GetImageRowDataByPlane( short whichPlane, unsigned long startCol, unsigned long startRow,
  108.                             unsigned long nCols, unsigned long nRows, char *pBuffer, unsigned long rowOffset ) = 0;
  109.     
  110.     // Get image first alpha channel data according to the options set if relevant.
  111.     //    If the alpha samples are already munged, i.e. kNoAlphaSamples is set or
  112.     //    if image does not have any, then alpha samples will not be returned.
  113.     virtual PMXErr GetImageFirstAlphaSamples( unsigned long startCol, unsigned long startRow,
  114.                             unsigned long nCols, unsigned long nRows, char *pBuffer, unsigned long rowOffset ) = 0;
  115.  
  116.     // The following interfaces require two-pass calls.
  117.     // The first call to get the size. If size > 0, caller allocate buffer of size
  118.     // The second call with the allocated buffer will return the desired information.
  119.                
  120.     // Get image's instrinsic color map:
  121.     // 1. full color images, there is no color map so *pSize = 0.
  122.     // 2. indexed images, the color map.
  123.     // 3. grayscale images, grayscale ramp according to the photometric
  124.     //      interpretation and/or the setting of kMonoAsBlackZero.
  125.     // The color map returned in a TIFF style map where color entries are
  126.     // arranged as planar data. Each color component is a short.
  127.     virtual PMXErr GetImageColorMap( long *pSize, char *pColorMap ) = 0;
  128.     
  129.     // Get image's unflatten ICC profile if image is color managed.
  130.     // When image is not color managed, *pSize = 0;
  131.     virtual    PMXErr GetImageProfile( long *pSize, char *pProfile ) = 0;
  132.     
  133.     // Get image's instrinsic ink attributes (valid only for hifi image).
  134.     // If image is not a hifi image *pCount = 0, other *pCount indicate the number
  135.     // of inks.
  136.     // Each ink name is a fixed length of 255 chars.
  137.     virtual PMXErr GetImageIntrinsicInkAttr( long *pCount, char *pInkNames ) = 0;
  138.     
  139.     // Sets image's mediaType and pluginType fields.  The mediaType defines the type of media
  140.     // the image represents (ex: 'moov' for QuickTime movie).  The pluginType defines the
  141.     // preferred plugin for double-click editing of the media image (ex: 'QTFP' for QuickTime
  142.     // Media Plugin).
  143.     // To NOT set one of the types, pass in a null pointer.
  144.     // Therefore the mediaType and pluginType must be either null or a
  145.     // pointer to a 4-byte character array.
  146.     virtual PMXErr SetImageMediaAndPluginTypes( char *mediaType, char *pluginType ) = 0;
  147. };
  148.   
  149. #endif    // __cplusplus
  150. #endif    // __CIMGACC_H
  151.